Java 中每个原始类型都有一个对应的包装类型:
基本类型 | 包装类型 |
---|---|
boolean | Boolean |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Char |
包装类的必要性:
- Java 很多代码只能操作对象,为了方便操作基本类型,需要包装类
- 包装类提供了很多方便的方法便于对数据的操作
包装类的基本用法
包装类与基本类型的转换
包装类与基本类型的转换代码结构都是类似的,每种包装类都有一个静态方法 valueOf() 接受基本类型,返回引用类型,也有一个实例方法 xxValue() 方法返回对应的基本类型。
以 boolean 和 Boolean 转换为例:
1 | boolean b1 = false; |
装箱:将基本类型转换为包装类型的过程
拆箱:将包装类型转换为基本类型的过程
Java 5 引入了自动装箱和自动拆箱的机制,该机制由编译器提供,实际依旧调用了对应的valueOf()方法和 xxxValue() 方法。
每种包装类也支持通过构造函数实例化,但是不推荐使用,构造函数会创建一个新对象,而很多包装类内部都会缓存包装类对象。
包装类的共同点
- 所有包装类都重写了 Object 类的 equals 方法
- 所有包装类都重写了 Object 类的 hashCode 方法
- 所有包装类都重写了 Object 类的 toString 方法
- 所有包装类都实现了 Comparable 接口
- 所有包装类都有一个 valueOf(String) 方法
- 所有包装类都有一个 parseOf(String) 方法
- 所有包装类还定义了一些常用常量
Number类
Number 类是所有包装类的抽象类,定义了如下方法,用于包装类返回任意类型的基本数据类型:
1 | byte byteValue(); |
不可变性
包装类都是不可变类:
- 所有包装类都声明为 final , 不能被继承
- 内部基本类型值都是私有的,且声明为 final
- 没有定义的 setter 方法